package mx.unam.proteco.entidades;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Juan Fco. Navarrete
 */

@Entity
@Table(name = "EMPLEADOS")
public class Empleado implements Serializable
{
    private Long empleadoId;
    private String nombres;
    private String apellidoPaterno;
    private String apellidoMaterno;
    private Double salario;    
    private Date fechaContratacion;
    private Departamento departamento;
    private Direccion direccion;
    private Collection<Proyecto> proyectos;

    @Column(name = "APELLIDO_MATERNO", length = 50)
    public String getApellidoMaterno()
    {
        return apellidoMaterno;
    }

    public void setApellidoMaterno(String apellidoMaterno)
    {
        this.apellidoMaterno = apellidoMaterno;
    }

    @Column(name = "APELLIDO_PATERNO", length = 50, nullable = false)
    public String getApellidoPaterno()
    {
        return apellidoPaterno;
    }

    public void setApellidoPaterno(String apellidoPaterno)
    {
        this.apellidoPaterno = apellidoPaterno;
    }

    @ManyToOne(optional = false)
    @JoinColumn(name = "DEPARTAMENTO_ID")
    public Departamento getDepartamento()
    {
        return departamento;
    }

    public void setDepartamento(Departamento departamento)
    {
        this.departamento = departamento;
    }

    @ManyToOne(optional = false)
    @JoinColumn(name = "DIRECCION_ID")
    public Direccion getDireccion()
    {
        return direccion;
    }

    public void setDireccion(Direccion direccion)
    {
        this.direccion = direccion;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "FECHA_CONTRATACION", nullable = false)
    public Date getFechaContratacion()
    {
        return fechaContratacion;
    }

    public void setFechaContratacion(Date fechaContratacion)
    {
        this.fechaContratacion = fechaContratacion;
    }

    @Id
    @GeneratedValue
    @Column(name = "EMPLEADO_ID")
    public Long getEmpleadoId()
    {
        return empleadoId;
    }

    public void setEmpleadoId(Long empleadoId)
    {
        this.empleadoId = empleadoId;
    }
    

    @Column(length = 50, nullable = false)
    public String getNombres()
    {
        return nombres;
    }

    public void setNombres(String nombres)
    {
        this.nombres = nombres;
    }

    @ManyToMany
    @JoinTable(name = "EMPLEADOS_PROYECTOS",
        joinColumns = @JoinColumn(name = "EMPLEADO_ID", nullable = false),
        inverseJoinColumns = @JoinColumn(name = "PROYECTO_ID", nullable = false)
    )
    public Collection<Proyecto> getProyectos()
    {
        return proyectos;
    }

    public void setProyectos(Collection<Proyecto> proyectos)
    {
        this.proyectos = proyectos;
    }

    @Basic(optional = false)
    public Double getSalario()
    {
        return salario;
    }

    public void setSalario(Double salario)
    {
        this.salario = salario;
    }

    @Override
    public String toString()
    {
        return "Empleado{" + "empleadoId=" + empleadoId + "nombres=" + nombres + "apellidoPaterno=" + apellidoPaterno + "apellidoMaterno=" + apellidoMaterno + "salario=" + salario + "fechaContratacion=" + fechaContratacion + '}';
    }
}
